package com.spring.framework.config.value;

import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;

/**
 * 注解@Value除了注入字面量、外部属性文件、SPEL的表达式计算、SPEL的复杂类型属性注入、SPEL其他bean的属性注入……等等，
 * 还可以注入一些特别的属性或者资源。@Value还可以使用SPEL直接注入操作系统相关资源属性、以及Resource资源。
 *
 * @author xuweizhi
 * @since 2020/12/15 15:46
 */
@Component
@ToString
@SuppressWarnings("all")
public class ValueResource {

	//SPEL直接注入系统属性

	@Value("#{systemProperties['java.home']}")
	private String javaHome;

	@Value("#{systemProperties['java.version']}")
	private String javaVersion;

	//SPEL注入Resource资源
	/**
	 * 注入文件资源
	 */
	@Value("classpath:value.properties")
	private Resource classPathResource;

	//@Value("G:\\Idea\\springcoreannotation\\src\\main\\resources\\value3.properties")
	//private Resource classPathContextResource;

	/**
	 * 注入URL资源
	 */
	@Value("https://spring.io/")
	private Resource urlResource;



	public static void main(String[] args) {
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ValueResource.class);
		System.out.println(applicationContext.getBean(ValueResource.class));
	}

}
